package cn.broadsense.biz.service;

import cn.broadsense.biz.bo.channel.ChannelOrgBo;
import cn.broadsense.biz.bo.channel.ChannelTagBo;
import cn.broadsense.biz.domain.Channel;
import cn.broadsense.biz.domain.ChannelOrg;
import cn.broadsense.biz.dto.ChannelOrgCountDto;
import cn.broadsense.biz.vo.ChannelGovernanceVo;
import cn.broadsense.biz.vo.ChannelVo;
import cn.broadsense.biz.vo.SearchChannelVo;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author pengxin
 * @description 针对表【t_channel(点位表 )】的数据库操作Service
 * @createDate 2023-09-12 10:55:35
 */
public interface ChannelService extends IService<Channel> {

    /**
     * 分页查询
     *
     * @param channel
     * @return
     */
    List<Channel> findPage(Channel channel);

    /**
     * 点位管理列表
     *
     * @param channel
     * @return
     */
    List<Channel> findPageV2(Channel channel);

    /**
     * 通过组织架构查询点位列表
     *
     * @param bo
     * @return
     */
    List<Channel> queryOrgChannels(ChannelOrgBo bo);

    /**
     * 通过组织架构查询点位列表
     *
     * @param bo
     * @return
     */
    List<Channel> queryTagChannels(ChannelTagBo bo);

    /**
     * 获取点位详细信息包含三维数据
     *
     * @param id
     * @return
     */
    Channel getDetails(Long id);

    /**
     * 获取父类code
     *
     * @param parentCode
     * @return
     */
    List<ChannelOrg> channelOrgByParentCode(String parentCode);

    /**
     * 收藏点位
     *
     * @param type 1收藏 2取消收藏
     * @param id
     */
    void followChannel(Long id, Integer type);

    /**
     * 根据组织编码统计点位数量
     *
     * @return
     */
    List<ChannelOrgCountDto> countByOrgQty();

    /**
     * 编辑点位
     *
     * @param id
     * @param channelVo
     */
    void edit(Long id, ChannelVo channelVo);

    void importData(List<ChannelVo> list);

    /**
     * 搜索点位列表
     *
     * @param searchChannelVo
     * @return
     */
    List<Channel> searchChannelList(SearchChannelVo searchChannelVo);

    /**
     * 根据坐标范围查询点位列表
     *
     * @param coordinateList
     * @return
     */
    List<Channel> polygonChannel(List<String> coordinateList);

    /**
     * 点位管理列表
     *
     * @param channel
     * @return
     */
    List<Channel> getList(Channel channel);

    /**
     * 根据id添加自定义标签
     *
     * @param channelId 点位ID
     * @param customTag 标签名称
     */
    void addCustomTag(Long channelId, String customTag);

    /**
     * 修改自定义标签
     * @param id 自定义标签ID
     * @param customTag  自定义标签名称
     */
    void editCustomTag(Long id, String customTag);

    /**
     * 删除自定义标签
     * @param id
     */
    void delCustomTag(Long id);
}
